﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.IO;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Engine;

namespace MyControls
{
    public partial class CocVang : UserControl
    {
        public event EventHandler EventDelete;
        
        private bool _capture = true;
        /// <summary>
        /// Xác định có capture picture từ richtextbox hay không
        /// </summary>
        public bool capture
        {
            set { _capture = value; }
            get { return _capture; }
        }

        private string _fileName = string.Empty;
        /// <summary>
        /// Tên file ảnh để lưu vào file xml
        /// </summary>
        public string ChildFileName
        {
            set { _fileName = value; }
            get { return _fileName; }
        }

        private string _fullPath = string.Empty;
        /// <summary>
        /// Đường dẫn file ảnh trên local để đưa lên server
        /// </summary>
        public string FullPath
        {
            set { _fullPath = value; }
            get { return _fullPath; }
        }

        private bool _modify = true;
        /// <summary>
        /// Trạng thái của phần tử
        /// Căn cứ vào đây để biết có cần tải lại ảnh hay không
        /// </summary>
        public bool Modify
        {
            set { _modify = value; }
            get { return _modify; }
        }

        private Image _image = null;
        /// <summary>
        /// Ảnh để hiện ra trong trường hợp xem lại đề đã có
        /// </summary>
        public Image Image
        {
            set
            {
                _image = value;
                picData.Image = _image;
                bool _visiblePic = _image != null;
                capture = cmdBrowse.Visible = rtxtData.Visible = !(cmdEdit.Visible = picData.Visible = _visiblePic);
                if(IsTuLuan)//Nếu tự luận thì bỏ cả nút này đi
                    cmdBrowse.Visible = false;
            }
            get { return _image; }
        }

        private string _value = string.Empty;
        /// <summary>
        /// Giá trị trong trường hợp tự luận
        /// </summary>
        public string Value
        {
            set
            {
                _value = value;
                rtxtData.Text = _value;
                picData.Visible = !(rtxtData.Visible = true);
            }
            //get { return _value; }
            get 
            {
                _value = _value.Replace(",", ".");
                return _value; 
            }
        }

        private string _isTrue = "0";
        /// <summary>
        /// Là đáp án đúng trong trường hợp trắc nghiệm (luôn đúng trong trường hợp tự luận)
        /// </summary>
        public string IsTrue
        {
            set { _isTrue = value; }
            get { return _isTrue; }
        }

        private bool _isTuLuan;
        /// <summary>
        /// Là đáp án tự luận?
        /// </summary>
        public bool IsTuLuan
        {
            set
            {
                _isTuLuan = value;
                /*
                 * Nếu là tự luận thì
                 *  - Không có picData, k có nút browse ảnh, k có các thuộc tính ảnh khác
                 *  - Không capture
                 *  - Luôn đúng
                 * Nếu là trắc nghiệm thì
                 *  - Nếu load ~ có ảnh -> show ảnh + hiện nút sửa
                 *  - Nếu tạo mới ~ k có ảnh -> show richtextbox + hiện nut browse
                 */

                if (_isTuLuan)
                {
                    picData.Visible = cmdBrowse.Visible = cmdEdit.Visible = false;//không có các nút bấm
                    rtxtData.Visible = true;
                    ChildFileName = FullPath = string.Empty;//không tên file ảnh, không có đường dẫn file ảnh
                    Image = null;//không có ảnh
                    capture = false;
                    IsTrue = "1";//luôn đúng
                }
                else
                {
                    bool _visiblePic = _image != null;
                    capture = cmdBrowse.Visible = rtxtData.Visible = !(cmdEdit.Visible = picData.Visible = _visiblePic);
                }
            }
            get { return _isTuLuan; }
        }

        #region Methods
        /// <summary>
        /// Set value cho một số properties
        /// </summary>
        /// <param name="fileName"></param>
        /// <param name="image"></param>
        /// <param name="fullPath"></param>
        /// <param name="modify"></param>
        private void SetProperties(string fileName, Image image, string fullPath, bool modify)
        {
            ChildFileName = fileName;
            Image = image;
            FullPath = fullPath;
            Modify = modify;
        }

        /// <summary>
        /// Capture image from richtextbox
        /// Set value cho thuộc tính Value trong trường hợp tự luận
        /// </summary>
        /// <returns>Đường dẫn tới file ảnh</returns>
        public string MyCapture(int _class)
        {
            // Bo het dau xuong dong
            string stringText = rtxtData.Text.Replace("\n", string.Empty);            
            stringText = stringText.Trim();
            if(IsTuLuan)
                Value = stringText;
            if (_capture)
            {
                ChildFileName = DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss:fffffff").Replace("/", string.Empty).Replace(":", string.Empty).Replace(" ", string.Empty);
                ChildFileName += ".png";
                
                if (stringText.CompareTo("") == 0)
                {
                    CEngine.CreateImageFromEquations(ref rtxtData, ChildFileName, false);
                }
                // Nguoc lai neu khong phai la so binh thuong
                else
                {
                    CEngine.CreateImageFromText(rtxtData.Text, ChildFileName, _class);
                }
                SetProperties(ChildFileName, Image.FromFile(Environment.CurrentDirectory + @"\" + ChildFileName), Environment.CurrentDirectory + @"\" + ChildFileName, true);
            }

            return FullPath;
        }

        /// <summary>
        /// Thay đổi trạng thái component sang trạng thái vừa load dữ liệu
        /// Method này dùng ngay sau khi đã upload picture data lên server để tránh upload khi không có sửa đổi gì
        /// (xml thì cho phép upload lại)
        /// </summary>
        public void ChangeStatusToLoad()
        {
            if (!_isTuLuan)
            {
                Modify = false;
                cmdEdit.Visible = picData.Visible = true;
                picData.Image = Image;
                cmdBrowse.Visible = rtxtData.Visible = false;
            }
        }
        #endregion


        public CocVang()
        {
            InitializeComponent();
            picData.Visible = !(rtxtData.Visible = true);
            rtxtData.Focus();
        }

        private int _index;
        public int iIndex
        {
            get { return _index; }
            set { 
                _index = value; 
                groupBox1.Text = "Câu hỏi: " + (_index + 1).ToString(); 
            }
        }

        private void CocVang_Load(object sender, EventArgs e)
        {
            cocVang_DapAn1.bTrue = true;
            cocVang_DapAn1.cbcheck += CB_DapAn_Check;
            cocVang_DapAn2.cbcheck += CB_DapAn_Check;
            cocVang_DapAn3.cbcheck += CB_DapAn_Check;
            cocVang_DapAn4.cbcheck += CB_DapAn_Check;
            groupBox1.Text = "Câu hỏi: " + (_index + 1).ToString();
            //Location = new Point(6, _index * Height);
        }

        private int _iTrue = 1;
        public int SelectedTrue { get { return _iTrue; } set
        {
            if(value!=_iTrue)
            {
                _iTrue = value;
                if(_iTrue==1)
                {
                    cocVang_DapAn1.bTrue = true;
                }
                if (_iTrue == 2)
                {
                    cocVang_DapAn2.bTrue = true;
                }
                if (_iTrue == 3)
                {
                    cocVang_DapAn3.bTrue = true;
                }
                if (_iTrue == 4)
                {
                    cocVang_DapAn4.bTrue = true;
                }
            }
        }}
        private bool bEvent = true;

        private void CB_DapAn_Check(object sender, EventArgs e)
        {
            if (bEvent == true)
            {
                bEvent = false;
                RadioButton cb = (RadioButton)sender;
                var obj = cb.Parent;
                if (cocVang_DapAn1.Equals(obj))
                {
                    _iTrue = 1;
                    cocVang_DapAn2.bTrue = false;
                    cocVang_DapAn3.bTrue = false;
                    cocVang_DapAn4.bTrue = false;
                }
                if (cocVang_DapAn2.Equals(obj))
                {
                    _iTrue = 2;
                    cocVang_DapAn1.bTrue = false;
                    cocVang_DapAn3.bTrue = false;
                    cocVang_DapAn4.bTrue = false;
                }
                if (cocVang_DapAn3.Equals(obj))
                {
                    _iTrue = 3;
                    cocVang_DapAn1.bTrue = false;
                    cocVang_DapAn2.bTrue = false;
                    cocVang_DapAn4.bTrue = false;
                }
                if (cocVang_DapAn4.Equals(obj))
                {
                    _iTrue = 4;
                    cocVang_DapAn1.bTrue = false;
                    cocVang_DapAn1.bTrue = false;
                    cocVang_DapAn2.bTrue = false;
                }
                bEvent = true;
            }
        }

        private void cmdBrowse_Click(object sender, EventArgs e)
        {
            OpenFileDialog _openFileDialog = new OpenFileDialog();
            _openFileDialog.Filter = "Image PNG|*.png|Image Jpeg|*.jpg|Image Bitmap|*.bmp|All Images|*.png;*.jpg;*.jpeg;*.bmp";
            _openFileDialog.RestoreDirectory = true;
            _openFileDialog.Title = "Select one image file!";
            if (_openFileDialog.ShowDialog() == DialogResult.OK)
            {
                System.Drawing.Image tmp = Image.FromFile(Path.GetFullPath(_openFileDialog.FileName));
                if (tmp.Size.Width > picData.Size.Width || tmp.Size.Height > picData.Height)
                {
                    MessageBox.Show(
                        "Ảnh quá lớn! Vui lòng chọn ảnh kích thước nhỏ hơn hoặc bằng " + picData.Size.Width + "x" +
                        picData.Size.Height, "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    return;
                }

                _capture = false;
                ChildFileName = DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss:fffffff").Replace("/", string.Empty).Replace(":", string.Empty).Replace(" ", string.Empty);
                ChildFileName += ".png";
                SetProperties(ChildFileName, Image.FromFile(Path.GetFullPath(_openFileDialog.FileName)), Path.GetFullPath(_openFileDialog.FileName), true);
                picData.Image = Image.FromFile(Path.GetFullPath(_openFileDialog.FileName));
                cmdBrowse.Visible = rtxtData.Visible = false;
                picData.Visible = cmdEdit.Visible = true;
            }
        }

        private void cmdEdit_Click(object sender, EventArgs e)
        {
            DialogResult dialogResult = MessageBox.Show("Nếu chấp nhận sửa bạn sẽ phải nhập lại nội dung.\nBạn có chắc muốn sửa?", "Xac nhan sua", MessageBoxButtons.YesNo,
                                                        MessageBoxIcon.Question);
            if (dialogResult == DialogResult.Yes)
            {
                _capture = true;
                SetProperties(string.Empty, null, string.Empty, true);
                cmdBrowse.Visible = rtxtData.Visible = true;
                picData.Visible = cmdEdit.Visible = false;
                rtxtData.Focus();
            }
        }

        private void BT_Delete_Click(object sender, EventArgs e)
        {
            if (EventDelete != null)
                EventDelete(sender, e);
        }
    }
}
